package net.example.lesson3.proxy;

/**
 * 学生代理类，也实现了Person接口，保存一个学生实体，这样既可以代理学生产生行为
 *
 * @author 肖红亮
 * @date 2018/9/6
 * @since JDK1.7
 */
public class StudentsProxy implements Subject {

    //被代理的学生
    private Student stu;

    public StudentsProxy(Person stu) {
        // 只代理学生对象
        if(stu.getClass() == Student.class) {
            this.stu = (Student)stu;
        }
    }

    //代理上交班费，调用被代理学生的上交班费行为
    @Override
    public void giveMoney() {
        //代理之前执行的事情
        System.out.println(String.format("交班费之前：%s最近学习有进步!", stu.getName()));
        stu.giveMoney();
        System.out.println(String.format("交班费之后：%s最近..........", stu.getName()));
    }

    @Override
    public void registerLike(final String like) {
        //代理之前执行的事情
        System.out.println(String.format("%s登记爱好之前.............", stu.getName()));
        stu.registerLike(like);
        System.out.println(String.format("%s登记爱好之后.............", stu.getName()));
    }

    @Override
    public void SayHello(String name) {
        //代理之前执行的事情
        System.out.println("sayHello()代理之前............."+name);
        System.out.println(String.format("hello, %s", name));
        System.out.println("sayHello()代理之后............."+name);
    }
}
